
package com.nuvo.beans;

import com.nuvo.entities.Categoria;
import com.nuvo.services.CategoriaService;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.faces.model.SelectItem;


@ManagedBean
@SessionScoped
public class CategoriaController implements Serializable{
    @EJB
    private CategoriaService categoriaService;
    
    private Categoria selected;
    

    
    public CategoriaController() {
    }
    
    //------metodos del bean---//

    public Categoria getSelected() {
        if(selected == null){
            selected = new Categoria();
        }
        return selected;
    }
    
    public List<Categoria> listado(){
    
        return categoriaService.findAll();
    }
    
    public String index() {
        return "/categoria/index";
    }
    
    public String nuevo() {
        selected = new Categoria();
        return "/categoria/new2";
    }
    
    public String agregar() {
        categoriaService.create(selected);
        return "/categoria/index";
    }
    
    public String editar(int codigo) {
        selected = categoriaService.find(codigo);
        return "/categoria/edit";
    }
    
     public String guardar() {
        categoriaService.edit(selected);
        return "/categoria/index";
    }
     
      public String eliminar(int codigo) {
        selected = categoriaService.find(codigo);
        try {
            categoriaService.remove(selected);
        }
        catch (Exception e) { SessionUtil.addErrorMessage("No se puede eliminar, posibles datos asociados"); }
        return "/categoria/index";
    }
      
      public void adicionar() {
        categoriaService.create(selected);
        
    }
      
      
      
      // --------------------- Metodos de Ayuda para acceder al Bean por otras Clases ---------------------

    public SelectItem[] getItemsAvailableSelectOne() {
        return getSelectItems(categoriaService.findAll(), true);
    }

    // Genera una lista con los items seleccionados (uno o muchos segun selectOne). Para entidades relacionadas.
    public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {

        int size = selectOne ? entities.size() + 1 : entities.size();
        SelectItem[] items = new SelectItem[size];
        int i = 0;
        if (selectOne) {
            items[0] = new SelectItem("", "seleccione uno");
            i++;
        }
        for (Object x : entities) {
            items[i++] = new SelectItem(x, x.toString());
        }
        return items;

    }
      
       // ------------------ Clase para conversiones se tiene que implementar todos los metodos ------------------
    @FacesConverter(forClass = Categoria.class)
    public static class CategoriaControllerConverter implements Converter {

        java.lang.Integer getKey(String value) {
            java.lang.Integer key;
            key = Integer.valueOf(value);
            return key;
        } 

        String getStringKey(java.lang.Integer value) {
            StringBuffer sb = new StringBuffer();
            sb.append(value);
            return sb.toString();
        } 

        @Override
        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
            if (value == null || value.length() == 0) { return null; }
            CategoriaController controller = (CategoriaController) facesContext.getApplication().getELResolver().
                    getValue(facesContext.getELContext(), null, "categoriaController");
            return controller.categoriaService.find(getKey(value));
        } 

        @Override
        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
            if (object == null) { return null; }
            if (object instanceof Categoria) {
                Categoria o = (Categoria) object;
                return getStringKey(o.getId());
            }
            else { throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + CategoriaController.class.getName()); }
        } 

    
    }
    
    
}
